<?php

class Tarefas extends Zend_Db_Table_Abstract
{

    protected $_name = 'tarefa';
    protected $_rowClass = 'row_Tarefa';
    protected $_referenceMap = array(
        'Projeto' => array(
            'columns' => array('projeto_id'),
            'refTableClass' => 'Projetos',
            'refColumns' => array('id')
        ),
        'Metaevento' => array(
            'columns' => array('metaevento_id'),
            'refTableClass' => 'Metaevento',
            'refColumns' => array('id')
        ),
        'Responsavel' => array(
            'columns' => array('responsavel_id'),
            'refTableClass' => 'Usuarios',
            'refColumns' => array('id')
        ),
    );

    public function insert($data)
    {
        if(isset($data['projeto_id'])){
            if(!$this->isUniqueNameProjeto($data['projeto_id'],$data['tarefa'])){
                throw new Exception('Esta tarefa já está cadastrada neste projeto!');
            }
        } else {
            if(!$this->isUniqueNameMetaevento($data['metaevento_id'],$data['tarefa'])){
                throw new Exception('Esta tarefa já está cadastrada neste metaevento!');
            }
            else
            if(!$this->isUniqueNameEvento($data['evento_id'],$data['tarefa'])){
                throw new Exception('Esta tarefa já está cadastrada neste evento!');
            }
        }
        if(!null==$data['responsavel_id']){
            $data['tarefa_status'] = 'Aguardando';
        } else {
            $data['tarefa_status'] = 'Não distribuído';
        }
        $data['dt_criacao'] = date('Y-m-d H:i:s');
        $dt_estimada =  new Zend_Date($data['dt_estimada']);
        $data['dt_estimada'] = $dt_estimada->get('YYYY-MM-dd HH:mm:ss');
        parent::insert($data);
    }

    public function isUniqueNameProjeto($projeto_id,$nome){
        $where = $this->getDefaultAdapter()->quoteInto('tarefa = ?', $nome)
                .$this->getDefaultAdapter()->quoteInto(' and projeto_id = ?', $projeto_id);
        return (count($this->fetchAll($where)) == 0) ? true : false;
    }

    public function isUniqueNameMetaevento($metaevento_id,$nome){
        $where = $this->getDefaultAdapter()->quoteInto('tarefa = ?', $nome)
                .$this->getDefaultAdapter()->quoteInto(' and metaevento_id = ?', $metaevento_id);
        return (count($this->fetchAll($where)) == 0) ? true : false;
    }
    
    public function isUniqueNameEvento($evento_id,$nome){
        $where = $this->getDefaultAdapter()->quoteInto('tarefa = ?', $nome)
                .$this->getDefaultAdapter()->quoteInto(' and evento_id = ?', $evento_id);
        return (count($this->fetchAll($where)) == 0) ? true : false;
    }
    
    public function update($data,$where)
    {
        $dt_estimada =  new Zend_Date($data['dt_estimada']);
        $data['dt_estimada'] = $dt_estimada->get('YYYY-MM-dd HH:mm:ss');
        parent::update($data,$where);
    }

    public static function getTarefasProjetosByUser($user_id)
    {
        $db        = Zend_Db_Table::getDefaultAdapter();
        $cols      = array('t.*','p.projeto');
        $tarefa    = array('t'      => 'tarefa');
        $projeto   = array('p'      => 'projeto');
        
        $select = $db->select()
                     ->from($tarefa, $cols)
                     ->join($projeto,'p.id  = t.projeto_id');
        
        $result = $db->fetchAll($select);
        
        return $result;
    }
    
    public static function getTarefasMetaeventosByUser($user_id)
    {
        $db        = Zend_Db_Table::getDefaultAdapter();
        $cols      = array('t.*','m.metaevento');
        $tarefa    = array('t'      => 'tarefa');
        $metaevento   = array('m'      => 'metaevento');
        
        $select = $db->select()
                     ->from($tarefa, $cols)
                     ->join($metaevento,'m.id  = t.metaevento_id');
        
        $result = $db->fetchAll($select);
        
        return $result;
    }

    public static function getTarefasEventosByUser($user_id)
    {
        $db        = Zend_Db_Table::getDefaultAdapter();
        $cols      = array('t.*','e.evento');
        $tarefa    = array('t'      => 'tarefa');
        $metaevento   = array('e'      => 'evento');
        
        $select = $db->select()
                     ->from($tarefa, $cols)
                     ->join($metaevento,'e.id  = t.evento_id');
        
        $result = $db->fetchAll($select);
        
        return $result;
    }

    public static function getCheckProjetosByUser($user_id)
    {
        $db        = Zend_Db_Table::getDefaultAdapter();
        $cols      = array('t.*','p.projeto','u.apelido');
        $usuario   = array('u'      => 'usuario');
        $tarefa    = array('t'      => 'tarefa');
        $projeto   = array('p'      => 'projeto');
        
        $select = $db->select()
                     ->from($tarefa, $cols)
                     ->join($projeto,'p.id  = t.projeto_id')
                     ->join($usuario,'u.id  = p.responsavel_id')
                    ->where('responsavel_id=?',$user_id);
        
        $result = $db->fetchAll($select);
        
        return $result;
    }
}

